<?php
/**
 * @copyright Arthur Beer
 * @package core.autoload
 *
 * @copyright TinyWEB CMS
 * @link http://tinywebcms.ru
 * @link http://cms.vingrad.ru
 * @version SVN: $Id$ 
 */
 
 /**
  * Autoload
  */
final class Autoload
{
    /**
     * Autoload список
     *
     * @var SimpleXMLElement
     */
    private static $autoload;
    
    /**
     * Свойства класса.
     *
     * @var array
     */
    private static $instance;
    
    /**
     * Autoload file
     *
     * @var string
     */
    private static $file;
    
    /**
     * Конструктор класса
     * 
     */
    private function __construnct() {}
    
    public static function load($file)
    {
        self::$file = $file;
        self::$autoload = simplexml_load_file(self::$file);
    }
    
    public static function rebuild()
    {
        self::$autoload = simplexml_load_file(self::$file);
    }
    
    /**
     * Найти свойства класса
     *
     * @param string $class
     * @return boolean
     */
    public static function find($class)
    {
        /* @var $instance SimpleXMLElement */
        $instance = self::$autoload->xpath("instances/" . $class);
        
        if(!isset($instance[0]) || !$instance[0] instanceof SimpleXMLElement) {
            return false;
        }

        self::$instance = $instance[0]->attributes();
        return true;
    }
    
    /**
     * Вернуть путь до класса.
     *
     * @return string
     */
    public static function getPath()
    {
        return HOME_PATH . '/' . self::$instance['path'];
    }
}

/**
 * Стандартная PHP функция-обработчик для вызываемых
 * неизвестных системе классов.
 *
 * @param string $class
 */
function __autoload($class)
{
    if(Autoload::find($class) && file_exists(Autoload::getPath())) {
        require Autoload::getPath();
    } else {
        exec('(cd ' . FRAMEWORK_PATH . '; /usr/local/bin/php ./build/make autoload)');
        Autoload::rebuild();
        if(Autoload::find($class)) {
            require Autoload::getPath();
        }
    }
}

/**
 * Tab: 4 spaces
 * Encoding: utf-8
 */
?>